package demo1;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;



public class Config {
    File file;
    // public void OpenConfig(String filename) throws IOException,FileNotFoundException{
    // FileNotFoundException 继承自 IOException
    public void OpenConfig(String filename) throws  FileNotFoundException {
        if (!filename.endsWith(".ini")) {
            throw new FileNotFoundException("文件不是.ini文件");
        }
    }

    // 打开文件
    public void readConfig(){
    }

    public static void main(String[] args) {
        try{
            int[] arr = {1,2,3};
            arr[100] = 10;
            arr[0] = 10;
        }catch (ArrayIndexOutOfBoundsException e){
            System.out.println(e);
        }finally {
            System.out.println("finally中的代码一定会执行");
        }
        System.out.println("如果没有抛出异常，或者异常被处理了，try-catch后的代码也会执行");
    }

    public static void main5(String[] args) {
        int[] arr = {1, 2, 3};
        try {
            System.out.println("before");
            arr = null;
            System.out.println(arr[100]);
            System.out.println("after");
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("after try catch");
    }


    /*public static void main4(String[] args) {
        int[] arr = {1, 2, 3};
        try {
            System.out.println("before");
            arr = null;
            System.out.println(arr[100]);
            System.out.println("after");
        } catch (Exception e) { // Exception可以捕获到所有异常
            e.printStackTrace();
        }catch (NullPointerException e){ // 永远都捕获执行到
            e.printStackTrace();
        }
        System.out.println("after try catch");
    }*/


    public static void main3(String[] args) {
        int[] arr = {1, 2, 3};
        try {
            System.out.println("before");
            arr = null;
            System.out.println(arr[100]);
            System.out.println("after");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("这是个数组下标越界异常");
            e.printStackTrace();
        } catch (NullPointerException e) {
            System.out.println("这是个空指针异常");
            e.printStackTrace();
        }
        System.out.println("after try catch");
    }

    public static void main2(String[] args) {
        try {
            int[] array = {1,2,3};
            System.out.println(array[3]); // 此处会抛出数组越界异常
        }catch (NullPointerException e){ // 捕获时候捕获的是空指针异常--真正的异常无法被捕获到
            e.printStackTrace();
        }
        System.out.println("后序代码");
    }

    public static void main1(String[] args) throws IOException {
        Config config = new Config();
        try {
            config.OpenConfig("config.txt");
        }catch (IOException e) {
            e.printStackTrace();  //打印信息最全面
        }
        // 一旦异常被捕获处理了，此处的代码会执行
        System.out.println("异常如果被处理了，这里的代码也可以执行");

    }
}


/*public class Config {
    File file;
    // public void OpenConfig(String filename) throws IOException,FileNotFoundException{
    // FileNotFoundException 继承自 IOException
    public void OpenConfig(String filename) throws IOException {
        if (!filename.endsWith(".ini")) {
            throw new IOException("文件不是.ini文件");
        }
        if (!filename.equals("config.ini")) {
            throw new FileNotFoundException("配置文件名字不对");

        }
        // 打开文件


    }

    public static void main(String[] args) throws IOException {
        Config config = new Config();
        config.OpenConfig("config.ini");
    }
}*/
/*//语法格式：
        try{
// 将可能出现异常的代码放在这里
        }catch(要捕获的异常类型 e){
// 如果try中的代码抛出异常了，此处catch捕获时异常类型与try中抛出的异常类型一致时，或者是try中抛出异常的基类
        时，就会被捕获到
// 对异常就可以正常处理，处理完成后，跳出try-catch结构，继续执行后序代码
        }[catch(异常类型 e){
// 对异常进行处理
        }finally{
// 此处代码一定会被执行到
        }]
// 后序代码
// 当异常被捕获到时，异常就被处理了，这里的后序代码一定会执行
// 如果捕获了，由于捕获时类型不对，那就没有捕获到，这里的代码就不会被执行
        注意：
        1. []中表示可选项，可以添加，也可以不用添
        2. try中的代码可能会抛出异常，也可能不会*/
